package com.zhoug.json2.fast;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;

import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;

/**
 * fastjson工具类
 *
 * @Author 35574
 * @Date 2020/9/2
 * @Description
 */
public class FastJsonUtils {

    /**
     * 序列化
     *
     * @param obj          需要序列化的对象 可以是JavaBean eg: Person,集合:List,Map
     * @param prettyFormat 是否格式化输出结果，不管是true还是false对结果是没有影响的，只是格式不一样
     * @return JsonString
     */
    public static String toJson(Object obj, boolean prettyFormat) {
        if (obj != null) {
            return JSONObject.toJSONString(obj, prettyFormat);
        }
        return null;
    }

    /**
     * 序列化
     *
     * @param obj 需要序列化的对象 可以是JavaBean eg: Person,集合:List,Map
     * @return JsonString
     */
    public static String toJson(Object obj) {
        return toJson(obj, false);
    }

    /**
     * 反序列化
     *
     * @param jsonStr json字符串
     * @param clazz   实体类型
     * @param <T>
     * @return
     */
    public static <T> T fromJson(String jsonStr, Class<T> clazz) {
        if (jsonStr != null) {
            return JSON.parseObject(jsonStr, clazz);
        }
        return null;
    }

    /**
     *  反序列化为List<T>
     * @param jsonStr json字符串
     * @param clazz
     * @param <T>
     * @return List<T>
     */
    public static <T> List<T> fromJsonList(String jsonStr, Class<T> clazz) {
        if (jsonStr != null) {
            return JSON.parseArray(jsonStr, clazz);
        }
        return null;
    }

    /**
     * 反序列化为List<Object>
     * @param jsonStr json字符串
     * @param types List中对象的类型集合
     * @return List<Object>
     */
    public static List<Object> fromJsonList(String jsonStr, Type[] types) {
        if (jsonStr != null) {
            return JSON.parseArray(jsonStr, types);
        }
        return null;
    }

    /**
     * 反序列化为Map<String, Object>
     * @param jsonStr json字符串
     * @return Map<String, Object>
     */
    public static Map<String, Object> fromJsonMap(String jsonStr) {
        if (jsonStr != null) {
            return JSON.parseObject(jsonStr, new TypeReference<Map<String, Object>>() {
            });
        }
        return null;
    }

    /**
     * 反序列化为Map<String, T>
     * @param jsonStr json字符串
     * @param typeReference
     * @param <T>
     * @return Map<String, T>
     */
    public static <T> Map<String, T> fromJsonMap(String jsonStr, TypeReference<Map<String, T>> typeReference) {
        if (jsonStr != null) {
            return JSON.parseObject(jsonStr, typeReference);
        }
        return null;
    }




}
